package cn.xiaolang.function.timerVSquartz;


import java.util.Date;

import org.quartz.CronScheduleBuilder;
import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;


public class Quartz4Scheduler {
/**
定义Job；
定义Trigger；
获得Scheduler；
建立JobDetail对象，通过JodDetail对象实例化Job；
Job和Trigger建立关联；
开始调度 scheduler.start方法。
 */
	
    public static void main(String[] args) throws Exception{  
        new Quartz4Scheduler().startScheduler();  
    }  
    
    public void startScheduler()throws Exception{  
    	/**
    	 *  名称 是否必须 允许值                特殊字符 
			秒    是        0-59 ,            - * / 
			分    是        0-59 ,            - * / 
			时    是        0-23 ,            - * / 
			日    是        1-31 ,            - * ? / L W C 
			月    是        1-12 或 JAN-DEC   - * / 
			周    是        1-7 或 SUN-SAT    - * ? / L C # 
			年    否        空 或 1970-2099   - * / 
    	    0 10,44 14 ? 3 WEB 
		         意义：在三月中的每个星期三的下午 2:10 和 下午 2:44 被触发。 
    	 */
    	String rule = "1-10 * * * * ? ";//每分钟的前10s执行：触发规则
        Date runTime = DateBuilder.evenMinuteDate(new Date()); // 获取当前时间的下一分钟(不用cron表达式)
    	
        Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();//从工厂中获取一个调度器
        JobDetail jobDetail = JobBuilder.newJob(Quartz4Job.class).withIdentity("job名", "job组").build();//实例化任务详情，什么job
//        jobDetail.getJobDataMap().put(key, value); 可以向jobDataMap中添加数据
        /**
         * 触发器，job在什么rule下触发执行
         * 1.用cron表达式触发
         * 2.用指定日期触发DateBuilder
         */
//1        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger名", "job组").withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger名", "job组").withSchedule(CronScheduleBuilder.cronSchedule(rule)).startAt(runTime).build();
        /**
         *  将job注册到调度器
         */
        scheduler.scheduleJob(jobDetail, trigger); 
        /**
         *  启动调度器
         */
        scheduler.start();   
        try {
            Thread.sleep(65L * 1000L);
        } catch (Exception e) {
        }
        /**
         *  关闭调度器
         */
        scheduler.shutdown(true);
}  
}
